using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using JA.Negocios;
using System.IO;

namespace JA.Web.Apresentacao
{
    public partial class CadastroCliente : System.Web.UI.Page
    {
        UsuarioVO usuarioVO = null;

        protected void Page_Load(object sender, EventArgs e)
        {
            usuarioVO = (UsuarioVO)this.Session["userActive"];
            if (usuarioVO == null || !usuarioVO.cadCli)
                this.Response.Redirect("~/BackOffice.aspx");

            if (!IsPostBack)
            {
                Util.HabilitarCampos(false, this.panelCad);
                this.CarregarComboUF();
            }

        }
        private void CarregarComboUF()
        {
            try
            {
                Util.CarregarComboUF(this.ddlCadUF);
            }
            catch (Exception ex)
            {

                throw ex;
            }
        }


        /// <summary>
        /// Manipula o evento do bot&atilde;o btnSalvar
        /// </summary>
        /// <param name="sender">Objeto disparador do evento</param>
        /// <param name="e">Argumento do evento</param>
        protected void btnSalvar_Click(object sender, EventArgs e)
        {

            //Declara objetos
            ClienteVO clienteVO = null;
            bool novoRegistro = false;

            try
            {
                //Verifica se o ID é nulo, se sim = cadastro novo
                if (string.IsNullOrEmpty(this.txtCadId.Text))
                {
                    clienteVO = ClienteVO.CreateClienteVO();
                    clienteVO.cadastro = DateTime.Now;
                    clienteVO.cadastradoPor = usuarioVO.usuario;

                    novoRegistro = true;

                }
                //Recupera dados para serem alterados
                else
                {
                    //Recupera dados
                    clienteVO = ModelBO.getCliente(Int32.Parse(this.txtCadId.Text));

                }

                clienteVO.nome = this.txtCadNome.Text;
                clienteVO.CNPJ = this.txtCadCNPJ.Text;
                clienteVO.CPF = this.txtCadCPF.Text;
                clienteVO.IE = this.txtCadIE.Text;
                clienteVO.IM = this.txtCadIM.Text;
                clienteVO.contato = this.txtCadContato.Text;
                clienteVO.responsavel = this.txtCadResponsável.Text;

                clienteVO.endereco = this.txtCadEndereco.Text;
                clienteVO.enderecoNumero = this.txtCadNumero.Text;
                clienteVO.complemento = this.txtCadComplemento.Text;
                clienteVO.bairro = this.txtCadBairro.Text;
                clienteVO.cidade = this.txtCadCidade.Text;
                clienteVO.UF = this.ddlCadUF.SelectedValue;
                clienteVO.pais = this.txtCadPais.Text;
                clienteVO.CEP = this.txtCadCEP.Text;

                clienteVO.email = this.txtCadEmail.Text;
                clienteVO.SMS = this.txtCadSMS.Text;
                clienteVO.telefone1 = this.txtCadTel1.Text;
                clienteVO.telefone2 = this.txtCadTel2.Text;
                clienteVO.telefone2b = this.txtCadTel2b.Text;
                clienteVO.telefone3 = this.txtCadTel3.Text;

                clienteVO.ativo = this.ckbCadAtivo.Checked;

                clienteVO.edicao = DateTime.Now;
                clienteVO.editadoPor = usuarioVO.usuario;

                //Chama metodo para salvar ou criar novo registro
                if (novoRegistro)
                    ModelBO.newCliente(clienteVO);
                else
                    ModelBO.setCliente(clienteVO);

                // Exibe msg de sucesso ao salvar registro
                Util.ExibeAlert(this, "Registro salvo com sucesso!");

                //Popula grid atualizado
                this.btnPesquisa_Click(null, null);

                //Atualiza formulario, apos salvar os dados
                this.txtCadId.Text = clienteVO.idCliente.ToString();
                this.ltCadastradoPor.Text = clienteVO.cadastradoPor;
                this.ltEditadoPor.Text = clienteVO.editadoPor;
                this.ltDataCadastro.Text = ((DateTime)clienteVO.cadastro).ToString("dd/MM/yyyy");
                this.ltDataEdicao.Text = (clienteVO.edicao == null ? "" : ((DateTime)clienteVO.edicao).ToString("dd/MM/yyyy"));

                // Trava bot&atilde;o de edi&ccedil;&atilde;o
                this.btnEditar.Enabled = false;

                // Trava bot&atilde;o de exclusao
                this.btnExcluir.Enabled = false;

                // Desabilita o bot&atilde;o salvar
                this.btnSalvar.Enabled = false;

                // Habilida o botao novo
                this.btnNovo.Enabled = true;

                Util.HabilitarCampos(false, this.panelCad);

            }
            catch (Exception ex)
            {

                throw ex;
            }
        }

        /// <summary>
        /// Manipula o evento do bot&atilde;o btnPesquisa
        /// </summary>
        /// <param name="sender">Objeto disparador do evento</param>
        /// <param name="e">Argumento do evento</param>
        protected void btnPesquisa_Click(object sender, EventArgs e)
        {

            //Declara objetos
            int? idCliente = null;
            string nome = null;
            string cpf = null;
            string cnpj = null;

            try
            {
                if (!string.IsNullOrEmpty(this.txtId.Text))
                {
                    idCliente = Int32.Parse(this.txtId.Text);
                }

                if (!string.IsNullOrEmpty(this.txtNome.Text))
                {
                    nome = this.txtNome.Text;
                }

                if (!string.IsNullOrEmpty(this.txtCPF.Text))
                {
                    cpf = this.txtCPF.Text;
                }

                if (!string.IsNullOrEmpty(this.txtCNPJ.Text))
                {
                    cnpj = this.txtCNPJ.Text;
                }

                //
                this.grvResultado.DataSource = ModelBO.getClientes(idCliente, nome, false, null, false, cpf, cnpj);

                //Vincula os dados
                this.grvResultado.DataBind();
            }
            catch (Exception ex)
            {

                throw ex;
            }
        }

        /// <summary>
        /// Manipula o evento do bot&atilde;o btnCancelar
        /// </summary>
        /// <param name="sender">Objeto disparador do evento</param>
        /// <param name="e">Argumento do evento</param>
        protected void btnCancelar_Click(object sender, EventArgs e)
        {
            this.tabCliente.ActiveTabIndex = 0;

            // Desabilita os campos para edi&ccedil;&atilde;o
            Util.HabilitarCampos(false, this.panelCad);

            // Destrava bot&atilde;o de edi&ccedil;&atilde;o
            this.btnEditar.Enabled = !string.IsNullOrEmpty(this.txtCadId.Text);

            // Detrava bot&atilde;o de exclusao
            this.btnExcluir.Enabled = !string.IsNullOrEmpty(this.txtCadId.Text);

            // Detrava bot&atilde;o de novo
            this.btnNovo.Enabled = true;

            // Desabilita o bot&atilde;o salvar
            this.btnSalvar.Enabled = false;

        }

        protected void imgbVisualizar_Click(object sender, ImageClickEventArgs e)
        {
            // Declara objetos
            ClienteVO clienteVO = null;
            int idCliente = 0;

            try
            {
                //
                idCliente = int.Parse(((ImageButton)sender).CommandArgument);

                //
                clienteVO = ModelBO.getCliente(idCliente); ;

                this.txtCadId.Text = idCliente.ToString();
                this.txtCadNome.Text = clienteVO.nome;
                this.txtCadCPF.Text = clienteVO.CPF;
                this.txtCadCNPJ.Text = clienteVO.CNPJ;
                this.txtCadIE.Text = clienteVO.IE;
                this.txtCadIM.Text = clienteVO.IM;
                this.txtCadContato.Text = clienteVO.contato;
                this.txtCadResponsável.Text = clienteVO.responsavel;

                this.txtCadEndereco.Text = clienteVO.endereco;
                this.txtCadNumero.Text = clienteVO.enderecoNumero;
                this.txtCadComplemento.Text = clienteVO.complemento;
                this.txtCadBairro.Text = clienteVO.bairro;
                this.txtCadCidade.Text = clienteVO.cidade;
                this.ddlCadUF.SelectedValue = clienteVO.UF;
                this.txtCadPais.Text = clienteVO.pais;
                this.txtCadCEP.Text = clienteVO.CEP;

                this.txtCadEmail.Text = clienteVO.email;
                this.txtCadSMS.Text = clienteVO.SMS;
                this.txtCadTel1.Text = clienteVO.telefone1;
                this.txtCadTel2.Text = clienteVO.telefone2;
                this.txtCadTel2b.Text = clienteVO.telefone2b;
                this.txtCadTel3.Text = clienteVO.telefone3;

                this.ckbCadAtivo.Checked = (clienteVO.ativo != null ? (bool)clienteVO.ativo : false);

                this.ltCadastradoPor.Text = clienteVO.cadastradoPor;
                this.ltEditadoPor.Text = clienteVO.editadoPor;
                this.ltDataCadastro.Text = ((DateTime)clienteVO.cadastro).ToString("dd/MM/yyyy");
                this.ltDataEdicao.Text = (clienteVO.edicao == null ? "" : ((DateTime)clienteVO.edicao).ToString("dd/MM/yyyy"));

                //
                this.tabCliente.ActiveTabIndex = 1;

                //
                Util.HabilitarCampos(false, this.panelCad);

                //
                this.btnSalvar.Enabled = false;

                //
                this.btnEditar.Enabled = true;

                //
                this.btnExcluir.Enabled = true;

                //
                this.btnNovo.Enabled = true;

            }
            catch (Exception ex)
            {

                throw ex;
            }
        }

        /// <summary>
        /// Manipula o evento editar do web form
        /// </summary>
        /// <param name="sender">Objeto disparador de evento</param>
        /// <param name="e">Argumento do evento</param>
        protected void btnEditar_Click(object sender, EventArgs e)
        {
            // Habilita os campos para edi&ccedil;&atilde;o
            Util.HabilitarCampos(true, this.panelCad);

            // Trava apenas o text box do ID
            this.txtCadId.Enabled = false;

            // Trava bot&atilde;o de edi&ccedil;&atilde;o
            this.btnEditar.Enabled = false;

            // Trava bot&atilde;o de exclusao
            this.btnExcluir.Enabled = false;

            // Trava bot&atilde;o de novo
            this.btnNovo.Enabled = false;

            // Habilita o bot&atilde;o salvar
            this.btnSalvar.Enabled = true;

            this.txtCadNome.Focus();

        }

        protected void btnNovo_Click(object sender, EventArgs e)
        {
            //Limpa formulario, para a entrada de novo registro
            Util.LimparCampos(this.panelCad);
            this.ltCadastradoPor.Text = "";
            this.ltEditadoPor.Text = "";
            this.ltDataCadastro.Text = "";
            this.ltDataEdicao.Text = "";

            // Habilita os campos para edi&ccedil;&atilde;o
            Util.HabilitarCampos(true, this.panelCad);

            // Trava apenas o text box do ID
            this.txtCadId.Enabled = false;

            // Trava bot&atilde;o de edi&ccedil;&atilde;o
            this.btnEditar.Enabled = false;

            // Trava bot&atilde;o de exclusao
            this.btnExcluir.Enabled = false;

            // Trava bot&atilde;o de novo
            this.btnNovo.Enabled = false;

            // Habilita o bot&atilde;o salvar
            this.btnSalvar.Enabled = true;

            this.txtCadNome.Focus();

        }

        protected void btnExcluir_Click(object sender, EventArgs e)
        {
            //Declara objetos
            ClienteVO clienteVO = null;

            try
            {
                //Cria objeto
                clienteVO = ClienteVO.CreateClienteVO();

                clienteVO.idCliente = Int32.Parse(this.txtCadId.Text);

                //verifica se tem imovel cadastrado com este cliente
                if (ModelBO.getImovelXClienteCount(clienteVO.idCliente) > 0)
                {
                    Util.ExibeAlert(this, "Há imóveis associados a este cliente. Exclusão não permitida");
                    return;
                }

                //Chama metodo para salvar ou criar novo registro
                ModelBO.delCliente(clienteVO);

                // Exibe msg de sucesso ao salvar registro
                Util.ExibeAlert(this, "Registro excluido com sucesso!");

                //Popula grid atualizado
                this.btnPesquisa_Click(null, null);

                //Limpa formulario, apos salvar os dados
                Util.LimparCampos(this.panelCad);
                this.ltCadastradoPor.Text = "";
                this.ltEditadoPor.Text = "";
                this.ltDataCadastro.Text = "";
                this.ltDataEdicao.Text = "";


                // Trava bot&atilde;o de edi&ccedil;&atilde;o
                this.btnEditar.Enabled = false;

                // Trava bot&atilde;o de exclusao
                this.btnExcluir.Enabled = false;

                // Desabilita o bot&atilde;o salvar
                this.btnSalvar.Enabled = false;

                // Habilida o botao novo
                this.btnNovo.Enabled = true;

            }
            catch (Exception ex)
            {

                throw ex;
            }
            
        }

        protected void btnExcel_Click(object sender, EventArgs e)
        {
            List<ClienteVO> listCliente = ModelBO.getClientes();

            System.IO.StringWriter stringWrite = new System.IO.StringWriter();

            stringWrite.Write(  "\"[Email]\";" +
                                "\"[Nome]\";" +
                                "\"[CPF]\";" +
                                "\"[CNPJ]\";" +
                                "\"[IE]\";" +
                                "\"[IM]	\";" +
                                "\"[Endereco]\";" +
                                "\"[EnderecoNumero]\";" +
                                "\"[Complemento]\";" +
                                "\"[Bairro]\";" +
                                "\"[Cidade]\";" +
                                "\"[UF]\";" +
                                "\"[Pais]\";" +
                                "\"[CEP]\";" +
                                "\"[SMS]\";" +
                                "\"[Telefone1]\";" +
                                "\"[Telefone2]\";" +
                                "\"[Telefone3]\";" +
                                "\"[Telefone4]\";" +
                                "\"[Contato]\";" +
                                "\"[Responsavel]\";" +
                                "\"[Ativo]\";" +
                                "\"[Codigo]	\";" +
                                "\"[Data Cadastro:]\";" +
                                "\"[Data Edicao]:\";" +
                                "\"[Cadastrado por]:\";" +
                                "\"[Editado por]:\"\n\n");
                

            foreach (ClienteVO cVO in listCliente)
            {
                stringWrite.Write(  "\""+cVO.email + "\";" +
                                    "\""+cVO.nome + "\";" +
                                    "\""+cVO.CPF + "\";" +
                                    "\""+cVO.CNPJ + "\";" +
                                    "\""+cVO.IE + "\";" +
                                    "\""+cVO.IM	 + "\";" +
                                    "\""+cVO.endereco + "\";" +
                                    "\""+cVO.enderecoNumero + "\";" +
                                    "\""+cVO.complemento + "\";" +
                                    "\""+cVO.bairro + "\";" +
                                    "\""+cVO.cidade + "\";" +
                                    "\""+cVO.UF + "\";" +
                                    "\""+cVO.pais + "\";" +
                                    "\""+cVO.CEP+ "\";" +
                                    "\""+cVO.SMS+ "\";" +
                                    "\""+cVO.telefone1 + "\";" +
                                    "\""+cVO.telefone2 + "\";" +
                                    "\""+cVO.telefone3 + "\";" +
                                    "\""+cVO.telefone2b + "\";" +
                                    "\""+cVO.contato + "\";" +
                                    "\""+cVO.responsavel + "\";" +
                                    "\""+(cVO.ativo?"Ativo":"Inativo") + "\";" +
                                    "\""+cVO.idCliente.ToString() + "\";" +   
                                    "\""+cVO.cadastro.ToString("dd/MM/yyyy") + "\";" +
                                    "\""+cVO.edicao.ToString("dd/MM/yyyy") + "\";" +
                                    "\""+cVO.cadastradoPor + "\";" +
                                    "\"" + cVO.editadoPor + "\"\n");
            }

            Response.Clear();
            Response.AddHeader("content-disposition", "attachment;filename=Clientes.csv");
            Response.Charset = "iso-8859-1";
            Response.ContentType = "application/ms-excel";
            Response.Write(stringWrite.ToString());
            Response.End();
        }

    }
}
